﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using public_dbOpt;

namespace prjEMR22_154
{
    public partial class MR_contrl : Form
    {
        dbOPT dataOpt = new dbOPT();
        public static string strHSPID;//跨窗体公共变量--住院号
        public static int MR_ID;//跨窗体公共变量--病历序号
        public static bool New_check = false;

        public MR_contrl()
        {
            InitializeComponent();
        }

        private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e)
        {
        }

        private void splitContainer1_Panel2_Paint(object sender, PaintEventArgs e)
        {

        }

   

        private void dgvPatient_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            New_check = false;
            if (e.RowIndex >= 0) // 确保单击的是数据行，而不是列标题  
            {
                // 确保点击的是有效的单元格  
                if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
                {
                    // 获取点击的单元格所在的行对象  
                    DataGridViewRow row = dgvPatient.Rows[e.RowIndex];

                    // 访问同一行的其他单元格的值  
                    // 假设你有一个名为 "HspID" 的列，并且你想获取这个列的值  
                    strHSPID = row.Cells["HspID"].Value.ToString();
                    string mrIdString = row.Cells["病历序号"].Value.ToString();
                    MR_ID = int.Parse(mrIdString);

                    MR_contrl_exdit PatientInfo = new MR_contrl_exdit(); //实例化一个子窗口
                    //设置子窗口不显示为顶级窗口
                    PatientInfo.TopLevel = false;
                    //设置子窗口的样式，没有上面的标题栏
                    PatientInfo.FormBorderStyle = FormBorderStyle.None;
                    //填充
                    PatientInfo.Dock = DockStyle.Fill;
                    //清空Panel里面的控件 
                    this.splitContainer1.Panel2.Controls.Clear();
                    //加入控件
                    this.splitContainer1.Panel2.Controls.Add(PatientInfo);
                    //让窗体显示
                    PatientInfo.Show();
                }
            } 
        }

        private void MR_contrl_Load(object sender, EventArgs e)
        {
            strHSPID = PatientInfo_inquire.strHSPID;
            string sql = String.Format("select * from medrecordinfo where HspID = '{0}';", strHSPID);
            DataSet ds = new DataSet();//创建数据集
            ds = dataOpt.BindDataGridView(dgvPatient, sql);
            if (ds != null && ds.Tables[0].Rows.Count != 0) 
            {
                
            }//检查查询结果是否为空，非空则不执行任何操作
            else
            {
                // 处理没有数据或查询失败的情况  
                MessageBox.Show("病历为空。");
            }
        }

        private void label11_Click(object sender, EventArgs e)
        {

        }

        private void New_Click(object sender, EventArgs e)
        {
            string sql = String.Format("select 病历序号 from medrecordinfo where HspID = '{0}';", strHSPID);
            DataSet ds = new DataSet();//创建数据集
            ds = dataOpt.GetTable(sql);
            //string column1Value = ds.Tables[0].Rows[0]["病历序号"].ToString();
            //MR_ID = int.Parse(column1Value);
            //MessageBox.Show(MR_ID.ToString());
            MR_ID = GetMaxValueInColumnAsIntOrDefault("病历序号", sql);
            New_check = true;

            MR_contrl_exdit PatientInfo = new MR_contrl_exdit(); //实例化一个子窗口
            //设置子窗口不显示为顶级窗口
            PatientInfo.TopLevel = false;
            //设置子窗口的样式，没有上面的标题栏
            PatientInfo.FormBorderStyle = FormBorderStyle.None;
            //填充
            PatientInfo.Dock = DockStyle.Fill;
            //清空Panel里面的控件 
            this.splitContainer1.Panel2.Controls.Clear();
            //加入控件
            this.splitContainer1.Panel2.Controls.Add(PatientInfo);
            //让窗体显示
            PatientInfo.Show();

            
        }

        public int? GetMaxValueInColumnAsInt(string columnName, string sql)
        {
            DataSet ds = dataOpt.GetTable(sql);
            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
            {
                DataTable table = ds.Tables[0];
                DataColumn column = table.Columns[columnName];

                if (column != null)
                {
                    object maxValue = null;
                    foreach (DataRow row in table.Rows)
                    {
                        object currentValue = row[column];
                        if (currentValue != DBNull.Value)
                        {
                            if (maxValue == null || ((IComparable)currentValue).CompareTo(maxValue) > 0)
                            {
                                maxValue = currentValue;
                            }
                        }
                    }

                    // 尝试将 maxValue 转换为整数，使用异常处理  
                    try
                    {
                        // 如果 maxValue 是数值类型，但包装在 object 中，我们可以尝试直接转换  
                        // 但是，由于我们不知道确切的类型，最安全的方法是转换为字符串然后解析  
                        // 注意：如果 maxValue 是如 DateTime 这样的类型，这将失败  
                        return Convert.ToInt32(maxValue);
                    }
                    catch (FormatException)
                    {
                        // maxValue 不能转换为整数（可能不是有效的数字字符串）  
                    }
                    catch (InvalidCastException)
                    {
                        // maxValue 的类型不能直接转换为整数  
                    }
                    catch (OverflowException)
                    {
                        // maxValue 表示的数字超出了 Int32 的范围  
                    }
                }
            }

            // 如果转换失败、数据集为空、没有表、没有行、列不存在或列的数据类型不能转换为整数，则返回 null  
            return null;
        }

        // 如果您希望在没有找到有效整数时返回0（而不是null），可以稍微修改上面的方法：  
        public int GetMaxValueInColumnAsIntOrDefault(string columnName, string sql)
        {
            int? maxValueAsInt = GetMaxValueInColumnAsInt(columnName, sql);
            return maxValueAsInt.HasValue ? maxValueAsInt.Value : 0;
        }

        private void refresh_Click(object sender, EventArgs e)
        {
            string sql = String.Format("select * from medrecordinfo where HspID = '{0}';", strHSPID);
            DataSet ds = new DataSet();//创建数据集
            ds = dataOpt.BindDataGridView(dgvPatient, sql);
            if (ds != null && ds.Tables[0].Rows.Count != 0)
            {

            }//检查查询结果是否为空，非空则不执行任何操作
            else
            {
                // 处理没有数据或查询失败的情况  
                MessageBox.Show("病历为空。");
            }
        }


    }
}
